package com.qf.controller;

import com.qf.entity.SmsInterface;
import com.qf.vo.IsNullVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * @author cd
 * @version 1.0
 * @date 2021/11/23 21:31
 */
@RestController
@RequestMapping("/sms")
public class SmsController {
    @Autowired
    private IsNullVo isNullVo;

    /**
     * ip-hedder在码云仓库的配置文件中
     */
    @Value("${ip-header}")
    private String ipHeaders;


    @PostMapping("/smsInterface")
    public Map<String, String> smsInterface(SmsInterface sms, HttpServletRequest request) {

        //1.判断客户传入的短信对象中的所有属性，是否为空
        Map<String, String> resultMap = isNullVo.IsEmpty(sms);

        //2.如果有短信对象 中的属性为空，返回对应的提示信息
        if (resultMap.size() > 0) {
            return resultMap;
        }

        //3.获取用户服务器ip地址(包括使用与不使用负载均衡器都要获取)，填充到短信对象中
        String ip = getRealIP(request);
        sms.setIp(ip);
        //4.调用service进行进一 步对短信对象中的属性进行校验

        //5.返回短信发送成功信息
        return resultMap;


    }

    /**
     * 获取用户服务器的ip地址
     *
     * @return
     */
    public String getRealIP(HttpServletRequest request) {
        /**
         * 判断ipHeaders是否为空
         * 获取被nginx代理请求的ip地址
         */
        if(ipHeaders !=null){
            String[] split = ipHeaders.split("，");
            for (String ipHeader : split) {
                String ip = request.getHeader(ipHeader);
                if (StringUtils.isEmpty(ip)) {
                    return ip;
                }
            }
        }
        //直接获取ip地址
        return request.getRemoteAddr();
    }


}
